#include <stdio.h>

int main(int argc, char const *argv[])
{
    if( argc != 3 )
    {
        printf( "Pls input: ./a.out <dst file Name> <src file name>\n" );
        return -1;
    }

    FILE *fpDst = fopen( argv[1], "w" );
    FILE *fpSrc = fopen( argv[2], "r" );
    if ( NULL == fpSrc || NULL == fpDst )
    {
        printf( "Fail to open file\n" );
        return -1;
    }

    int cData;
    int iCounter=0;
    while( ( cData = fgetc( fpSrc ) ) != EOF )
    {
        fputc( cData, fpDst );
        ++iCounter;
    }

    int iRetSrc = fclose( fpSrc );
    int iRetDst = fclose( fpDst );
    if ( ( 0 != iRetSrc ) || ( 0 != iRetSrc ) )
    {
        printf( "Fail to fclose\n" );
        return -1;
    }

    printf( "Success to copy total %d char from file <%s> to file <%s>\n ", 
            iCounter, argv[2], argv[1] );
    
    return 0;
}

/*
程序功能:
    调用程序时, 输入两个文件名(目的文件, 源文件)作为参数.
    main函数接收到参数, 拷贝文件.

程序流程:
    判断是否获取合法的main函数参数
    建立读文件和写文件两个文件流
    循环读取源文件的字节, 写入目的文件, 直到读到文件尾.
    关闭两个文件流

涉及函数:
    fopen
    fgetc
    fputc
    fclose
    
知识要点:
    查询 man 手册得知, fgetc, fputc 等函数, 如果执行出错将返回EOF(即出错和读到文件尾的返回值一样)
    此时, 需要程序员调用 ferror 或者 feof 函数来判断
*/
